package com.afei.mybatis.mapper;

import com.afei.mybatis.pojo.User;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Map;

/**
 * @param
 * @author
 * @return
 */
public interface ParameterMapper {
    /**
     * mybatis获取参数值的两种方式：${} 和 #{}
     * ${}本质是字符串拼接
     * #{}本质上是占位符赋值
     * mybatis获取参数值的各种情况:
     * 1.mapper接口方法的参数为单个的字面量类型
     *  可以通过${}和#{}以任意的名称获取参数值，但是需要注意${}的单引号问题
     * 2.mapper接口方法的参数为单个的字面量类型
     * 此时mybatis会将这些参数放在一个map集合中，以两种方式进行存储
     * a>以arg0，arg1....为键，以参数为值
     * b>以param1，param2....为键，以参数为值
     * 因此只需要通过#{}和${}以键的方式访问值即可，但是需要注意${}的单引号问题
     * 3.若mapper接口方法的参数有多个，可以手动将这些参数放在一个map中存储
     * 只需要通过#{}和${}以键的方式访问值即可，单数需要注意${}的单引号问题
     *
     *
     * 4.mapper接口方法的参数是实体类类型的参数
     * 只需要通过#{}和${}以属性的方式访问属性值即可，但是需要注意${}的单引号问题
     * 5.使用@Param注解命名参数
     * 此时mybatis会将这些参数放在一个map集合中，以两种方式进行存储
     *a>以@Param注解的值为键，以参数为值
     * b>以param1，param2...为键，以参数为值
     * 因此只需要通过#{}和${}以键的方式访问值即可，单数需要注意${}的单引号问题
     */

    /**
     * 查询所有用户
     */
    List<User> getAllUser();
    /**
     * 根据username来查询user
     */
    User getUserByName(String username);
    /**
     * 验证登录
     */
    User checkLogin(String username,String password);
    /**
     * 验证登录
     */
    User checkLoginByMap(Map<String,Object> map);
    /**
     * 添加一个用户
     */
    int insertUser(User user);
    /**
     * 验证登录
     */
    User checkLoginByParam(@Param("username") String username,@Param("password") String password );
}
